<?php
namespace Monkey\Database\QueryHelper;


/**
 * 数据库查询助手接口\Monkey\Database\QueryHelper\_Interface
 * @package    Monkey\Database\QueryHelper
 * @author     HuangYi
 * @copyright  Copyright (c) 2011-07-01——2013-03-30
 * @license    New BSD License
 * @version    $Id: \Monkey\Database\QueryHelper\_Interface.php 版本号 2013-03-30 $
 */
interface _Interface
{
    /**
     * @param \Monkey\Database\Driver\_Interface &$driver
     * @return \Monkey\Database\QueryHelper\_Interface
     */
    public function _reset( \Monkey\Database\Driver\_Interface &$driver);
    /**
     * 转换关键字冲突标记
     * 需要注释的关键词标签内部不应有空格
     * @param string $string 字符串
     * @return string
     */
    public function quoteKeywords(&$string);
    /**
     * 获取系统内置字段类型
     * @param string $type 类型标识或自定义类型
     * @return string
     */
    public function getFieldType($type);
    /**
     * 对sql参数中的特殊字符进行转义
     * @param string|array $data 待转义的数据
     * @return string|array
     */
    public function escape($data);
    /**
     * 直接查询
     * @param string $sql 查询语句
     * @return \Monkey\Database\Driver\_Interface
     */
    public function query($sql);
    /**
     * 执行插入操作
     * @param array $options 操作选项，不建议手工构建这个参数，使用插入助手即可
     * @return \Monkey\Database\Driver\_Interface
     */
    public function insert($options);
    /**
     * 执行更新操作
     * @param array $options 操作选项，不建议手工构建这个参数，使用更新助手即可
     * @return \Monkey\Database\Driver\_Interface
     */
    public function update($options);
    /**
     * 执行select操作
     * @param array $options 操作选项，不建议手工构建这个参数，使用select助手即可
     * @return \Monkey\Database\Driver\_Interface
     */
    public function select($options);
    /**
     * 执行删除操作
     * @param array $options 操作选项，不建议手工构建这个参数，使用删除助手即可
     * @return \Monkey\Database\Driver\_Interface
     */
    public function delete($options);
    /**
     * 生成SQL插入语句（不要直接用）
     * @param array $options 插入选项，多维数组
     * @return string
     */
    public function buildInsert($options);
    /**
     * 生成SQL更新语句（不要直接用）
     * @param array $options 插入选项，多维数组
     * @return string
     */
    public function buildUpdate($options);
    /**
     * 生成Select查询语句（不要直接用）
     * @param array $options 插入选项，多维数组
     * @return string
     */
    public function buildSelect($options);
    /**
     * 生成SQL删除语句（不要直接用）
     * @param array $options 插入选项，多维数组
     * @return string
     */
    public function buildDelete($options);
    /**
     * 创建数据表
     * @param string $tableName 表名称
     * @param array  $fields   表字段
     * @param null|string $options   表扩展设置
     * @return boolean
     */
    public function createTable($tableName,$fields,$options=null);
    /**
     * 删除数据表
     * @param string $tableName 表名称
     * @return boolean
     */
    public function dropTable($tableName);
    /**
     * 重命名表
     * @param string $tableName    表名称
     * @param string $newTableName 表新名称
     * @return boolean
     */
    public function renameTable($tableName, $newTableName);
    /**
     * 清空数据表
     * @param string $tableName 表名称
     * @return boolean
     */
    public function truncateTable($tableName);
    /**
     * 增加字段
     * @param string $tableName 表名称
     * @param string $fieldName 新增的字段名称
     * @param string $fieldType 字段数据类型，可以使用内置， 也可以自定义
     * @return boolean
     */
    public function addField($tableName, $fieldName, $fieldType);
    /**
     * 删除字段
     * @param string $tableName 表名称
     * @param string $fieldName 字段名称
     * @return boolean
     */
    public function dropField($tableName, $fieldName);
    /**
     * 重命名字段
     * @param string $tableName 表名称
     * @param string $fieldName      老字段名称
     * @param string $newFieldName 	新字段名称
     * @return boolean
     */
    public function renameField($tableName, $fieldName, $newFieldName);
    /**
     * 修改字段属性
     * @param string $tableName 表名称
     * @param string $fieldName      字段名称
     * @param string $fieldType   	字段类型
     * @return boolean
     */
    public function alertField($tableName, $fieldName,$fieldType);
    /**
     * 读取表字段信息
     * @param string $tableName 表名
     * @return boolean|array
     * 返回结果结构如下：
     * array(
     *      'pri_name'      =>string,
     *      'pri_is_auto'   =>boolean,
     *      'fields_default'=>array,
     *      'fields_type'   =>array,
     * );
     */
    public function getTableMate($tableName);
}